//
// Created by Eric on 2023/1/21.
// 这个类用于管理事件。模拟主控器会从这个类对象中获得下一个要执行的事件。
//

#ifndef UUU_EVENTQUEUE_H
#define UUU_EVENTQUEUE_H

#include "EventGenerator.h"

class EventQueue {
public:
    // api
    const Event& PopEvent();
    // 用EventGenerator生成一批事件，然后加到数组里
    void PushEvent();
    // 初始化函数。提供一个dbi指针。指针是访问所有数据库的入口。
    void Initialize(DatabaseInfo* dbi){p_dbi_ = dbi;event_generator_.Initialize(p_dbi_);}

    vector<Event> GetEventList(){
        auto new_events = events_;
        events_ = vector<Event>();
        return new_events;
    }


public:
    // 构造方法
    EventQueue(){p_dbi_ = nullptr;}

private:
    // data
    EventGenerator event_generator_; // 事件生成器
    DatabaseInfo* p_dbi_;
    vector<Event> events_;

public:
    // 迭代器
    auto begin() {return events_.begin();}
    auto end() {return events_.end();}
};


const Event& EventQueue::PopEvent(){
    const auto& res = events_.back();
    events_.pop_back();
    return res;
}

void EventQueue::PushEvent(){
    auto new_events = event_generator_.SelectEvent();


    for(auto& event:new_events){
        events_.emplace_back(event);
    }
}


#endif //UUU_EVENTQUEUE_H
